package ch.penas.web;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.apache.log4j.Logger;


import ch.penas.business.dom.Competence;
import ch.penas.business.dom.Formateur;
import ch.penas.business.dom.RechercheAgenda;
import ch.penas.business.dom.RechercheFormateur;
import ch.penas.business.service.CompetenceService;
import ch.penas.business.service.CompetenceServiceImpl;
import ch.penas.business.service.FormateurService;
import ch.penas.business.service.FormateurServiceImpl;

/** @author Daniel */
@ManagedBean(name = "manageBeanUtilisateur")
@SessionScoped
public final class ManageBeanUtilisateur implements Serializable {

	/**La serialization de la class ManageBeanUtilisateur pour question de securiter.*/
    private static final long serialVersionUID = 7821547244981771579L;
    
    private static final Logger LOGGER = Logger.getLogger(ManageBeanUtilisateur.class);
    
    /** mUtilisateur est egale a un Formateur. */
    private Formateur mUtilisateur;
    
    /** mUtilisateurDel est egale a un Formateur. */
    private Formateur mUtilisateurDel;
    
    /** mUtilisateurAdd est egale a un Formateur. */
    private Formateur mUtilisateurAdd;
    
    /** mService est egale au service d'un Formateur. */
    private FormateurService mService;
    
    /** mCompetence est egale a une Competence. */
    private Competence mCompetence;
    
    /** mService est egale au service d'une Competence. */
    private CompetenceService mCompetenceService;
    
    private RechercheFormateur mRechercheFormateur;

    /** Constructeur par defaut de la class ManageBeanUtilisateur. */
	public ManageBeanUtilisateur() {
		this.mCompetenceService = new CompetenceServiceImpl();
		this.mCompetence = new Competence();
        this.mUtilisateur = new Formateur();
        this.mUtilisateurDel = new Formateur();
        this.mUtilisateurAdd = new Formateur();
        this.mService = new FormateurServiceImpl();
        this.mRechercheFormateur = new RechercheFormateur();
    }

    /** Permet de modifier un formateur.
     *
     * @return successUpdateUtilisateur si l'update c'est bien passer !
     */
	public String update() {
        this.mService.update(this.mUtilisateur);
        return "successUpdateUtilisateur";
    }
    
	/** Permet d'ajouter des formateurs.
     *
     * @return successUtilisateur si l'ajout c'est bien passer !
     */
    public String add() {
    	String aa = this.mService.getFormateur().getIdUtilisateur();
    	int ab = Integer.parseInt(aa);
    	Integer b = ab+=1;
    	String v = b.toString();    	
    	this.mUtilisateurAdd.setIdUtilisateur(v);
        this.mService.add(this.mUtilisateurAdd);
        this.mUtilisateurAdd = new Formateur();
        return "successUtilisateur";
    }
    
    /** Permet de supprimer des formateur.
     *
     * @return successDeleteUtilisateur si la suppresion c'est bien passer !
     */
    public String del() {
        this.mService.del(this.mUtilisateur);
        this.mUtilisateur = new Formateur();
        return "successDeleteUtilisateur";
    }
    
    /** Permet de rechercher des utilisateurs.
     *
     * @return un formateur si la recherche a aboutie
     */
	public String toSearch() {
        return "rechercheFormateur";
    }
	
	/** Permet d'afficher plus d'information a un formateur.
	 *
	 * @param mUtilisateur est egal a un formateur
	 */
	public void info(Formateur mUtilisateur) {
		this.mCompetenceService.info(mUtilisateur);
	}
    
    /** Permet de recuperer la valeur de mUtilisateur.
     *
     * @return mUtilisateur qui est egale au formateur
     */
    public Formateur getUtilisateur() {
        return this.mUtilisateur;
    }

    /** Permet de recuperer la valeur de mUtilisateurDel.
     *
     * @return mUtilisateurDel qui est egale au formateur
     */
	public Formateur getUtilisateurDel() {
        return this.mUtilisateurDel;
    }
    
    /** Permet de recuperer la valeur de mUtilisateurAdd.
     *
     * @return mUtilisateurAdd qui est egale au formateur
     */
    public Formateur getUtilisateurAdd() {
        return this.mUtilisateurAdd;
    }
    
    /** Permet de recuperer la valeur de mService.
     *
     * @return mService qui est egale au service d'un formateur
     */
    public FormateurService getService() {
        return this.mService;
    }
    
    /** Permet de recuperer la valeur de mCompetence.
     *
     * @return mCompetence qui est egale a une competence
     */
    public Competence getCompetence() {
        return this.mCompetence;
    }
    
    /** Permet de recuperer la valeur de mCompetenceService.
     *
     * @return mCompetenceService qui est egale au service d'une competence
     */
    public CompetenceService getServiceCompetence() {
        return this.mCompetenceService;
    }
	
	/** Permet de modifier la valeur de mUtilisateur.
	 *
	 * @param aUtilisateur est egale au mUtilisateur de formateur
	 */
	public void setSelectedUtilisateur(final Formateur aUtilisateur) {
		this.mUtilisateur = aUtilisateur;
	}
    /** Permet de recuperer la valeur de mUtilisateur.
     *
     * @return mUtilisateur qui est egale au formateur
     */
	public Formateur getSelectedUtilisateur() {
		return this.mUtilisateur;
	}
	
    /** Permet de recuperer la valeur de LOGGER.
     *
     * @return LOGGER qui est egale au LOGGER
     */
	public static Logger getLogger() {
		return LOGGER;
	}
	
	public RechercheFormateur getRechercheFormateur() {
		return mRechercheFormateur;
	}
}
